/*
 * 版权所有 ( c ) 联想集团有限公司 2005-2009 保留所有权利。
 * 项目：	Lenovo Push Service
 * 文件名：	RSACoderTest.java
 * 版本:    1.0
 * 描述：	
 * 作者：	刘兵召
 * 日期：	Jun 17, 2010 
 * 修改历史：
 * 【时间】		【修改者】	【修改内容】
 */
package com.feng.security.rsa;


import static org.junit.Assert.*;   

import org.apache.commons.codec.binary.Base64;
import org.junit.Before;   
import org.junit.Test;   

import java.util.Map;   

/** *//** 
*   
* @version 1.0 
* @since 1.0 
*/ 
public class RSACoderTest {   
    private String publicKey;   
    private String privateKey;   

    @Before 
    public void setUp() throws Exception {   
        Map<String, Object> keyMap = RSACoder.initKey();   

        publicKey = RSACoder.getPublicKey(keyMap);   
        privateKey = RSACoder.getPrivateKey(keyMap);   
        System.err.println("公钥: \n\r" + publicKey);   
        System.err.println("私钥： \n\r" + privateKey);   
    }   

    @Test 
    public void test() throws Exception {   
        System.err.println("公钥加密——私钥解密");   
        String inputStr = "刘兵召1";   
        byte[] data = inputStr.getBytes();   

        byte[] encodedData = RSACoder.encryptByPublicKey(data, publicKey);   

        byte[] decodedData = RSACoder.decryptByPrivateKey(encodedData,   
                privateKey);   

        String outputStr = new String(decodedData);   
        System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr);   
        assertEquals(inputStr, outputStr);   

    }   

    @Test 
    public void testSign() throws Exception {   
        System.err.println("私钥加密——公钥解密");   
        String inputStr = "tets";   
        byte[] data = inputStr.getBytes();   

        byte[] encodedData = RSACoder.encryptByPrivateKey(data, privateKey);
        String enC = Base64.encodeBase64String(encodedData);
        System.err.println("私钥加密:"+enC);
        byte[] decodedData = RSACoder.decryptByPublicKey(encodedData, publicKey);   

        String outputStr = new String(decodedData);   
        System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr);   
        assertEquals(inputStr, outputStr);   

        System.err.println("私钥签名——公钥验证签名");   
        // 产生签名   
        String sign = RSACoder.sign(encodedData, privateKey);   
        System.err.println("签名:\r" + sign);   

        // 验证签名   
        boolean status = RSACoder.verify(encodedData, publicKey, sign);   
        System.err.println("状态:\r" + status);   
        assertTrue(status);   

    }
}
